A transição dos macros estilos C para literais seguros em tipo do C++ representa uma mudança fundamental na usabilidade da linguagem, resolvendo a "Armadilha do NULL" onde a ambiguidade do macro zero causa erros lógicos silenciosos.
1. Falha na Resolução de Sobrecarga
Nos padrões legados (C++98), NULL é frequentemente definido como 0. Quando passado para funções sobrecarregadas, o compilador resolve NULL como um inteiro. Isso é evidenciado por:
std::cout << "NULL é um int";
2. A Solução nullptr
O C++11 introduziu nullptr, uma palavra-chave do tipo std::nullptr_t. Diferentemente do macro, ele não pode ser convertido implicitamente para um tipo integral (exceto bool), garantindo que sejam selecionadas sobrecargas específicas de ponteiros.
3. Ligação e Interoperabilidade
O C++ moderno exige extern "C" para evitar o mangleamento de nomes ao ligar com código C (por exemplo, compilado com gcc). Manter ponteiros seguros em tipo nessa fronteira é crítico.
$$\text{std::nullptr\_t} \neq \text{int}$$